import axios, { AxiosInstance } from 'axios'
import Aes from '@/utils/aes'
import { useUserStore } from '@/stores/user'
import { ElMessage } from 'element-plus'

const SECRET_KEY = 'C0D2ACC1205B4028A4888CAC475FBE35'

const instance: AxiosInstance = axios.create({
  // baseURL: 'http://127.0.0.1:8000',
  baseURL: 'http://192.168.2.108:8000',
  timeout: 20000,
  headers: {
    'Content-Type': 'application/json'
  }
})
// 添加请求拦截器
instance.interceptors.request.use(
  function (config) {
    const userStore = useUserStore()
    const method = config.method || 'get'
    if (userStore?.userInfo?.token) {
      config.headers['Authorization'] = userStore.userInfo.token
    }
    if (method.toLowerCase() == 'get') {
      config.params = Aes.Encrypt(JSON.stringify(config.params), SECRET_KEY)
    } else {
      // 加密处理'
      config.data = {
        secret: Aes.Encrypt(JSON.stringify(config.data), SECRET_KEY)
      }
    }
    // 在发送请求之前做些什么
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么
    return JSON.parse(Aes.Decrypt(response.data.secret, SECRET_KEY))
  },
  function (error) {
    try {
      const response = JSON.parse(Aes.Decrypt(error.response.data.secret, SECRET_KEY))
      // 权限校验失败处理
      if (response.code === 401) {
        ElMessage({
          message: response.message ? response.message : '接口返回message为空',
          type: 'error'
        })
        // 清空用户信息，重新登录等操作
        const userStore = useUserStore()
        userStore.logout()
      }
    } catch (e: any) {
      ElMessage({
        message: '服务器异常，请稍后再试',
        type: 'error'
      })
    }

    // 对响应错误做点什么
    return Promise.reject(error)
  }
)
export default instance
